<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
</head>
<body>
  <script>
    // 01 闭包就是函数嵌套函数（函数作为参数，函数作为返回值）
    // 02 闭包也是自由变量的特殊表现形式(在函数定义的时候就确定了)
    // 03 闭包可以形成局部作用域（避免变量全局污染）
    // 04 闭包可以在函数外部访问函数内部的局部比变量

    // 缺点：被引用变量不会被销毁
    // 案例：封装组件，插件；防抖节流函数就是闭包 react的hooks也是闭包


    // 01 自由变量：当前作用域没定义，确使用了的变量
    var num =  200;
    function fn(){
      alert(num);
    }
    function myfun(f){
      var num = 1000;
      f();
    }
    myfun(fn);
    // 02 闭包形成局部作用域
    (function(){
      var count = 100;
      var age =800;
      // alert(age);
    })()
    // js动态创建10p标签单击输出他的下标
    for(var i=0;i<10;i++){
      var p = document.createElement("p");
      p.innerHTML="我是第"+i+"行";
      // 单击时候for循环执行完毕，i的结果就是10
      (function(j){
        p.onclick=function(){alert(j)}
      })(i)
      
      document.body.appendChild(p);
    }
 
  </script>
</body>
</html>